[MSSQL] 取得特定年、月、星期的所有日期


Posted by mike-hsieh on 2023-10-18

系統開發需要這個邏輯,簡單紀錄一下:

思路: 透過遞迴取得一個月份的所有日期,再使用星期去篩選。
範例: 年份為2023,月份為11月,要取得周一、周四的日期。

DECLARE @Year INT = 2023;   --  年份。 2023年
DECLARE @Month INT = 11;    --  月份。 11月

WITH AllDays AS (
    SELECT DATEFROMPARTS(@Year, @Month, 1) AS [Date]
    UNION ALL
    SELECT DATEADD(DAY, 1, [Date])
    FROM AllDays
    WHERE DATEADD(DAY, 1, [Date]) <= EOMONTH(DATEFROMPARTS(@Year, @Month, 1))
)

SELECT [Date]
FROM AllDays
WHERE DATEPART(WEEKDAY, [Date]) IN (2, 5) -- MSSQL的星期代號 => Sun: 1, Mon: 2, Tue: 3, Wed: 4, Thu: 5, Fri: 6, Sat: 7
ORDER BY [Date]
OPTION (MAXRECURSION 31);   --  一個月最多31天,限制遞迴次數31


#MSSQL #date-of-weekday-in-a-month







Related Posts

Bicycle Kinematic Model 筆記

Bicycle Kinematic Model 筆記

[BE201] 後端中階:部署:Nginx + PM2

[BE201] 後端中階:部署:Nginx + PM2

第二章:4 製作策略濾網

第二章:4 製作策略濾網


Comments